<?php
require_once APPPATH.'controllers/app.php';
class Works extends App{
    public function __construct() {
        parent::__construct();
        $this->load->database();
        $this->load->library('grocery_CRUD');
        $this->load->model('work_model');
    }
    function index($pj_id){
        $data['title'] = "Phân rã công việc";
        $data['css_files'] = array();
        $data['js_files'] = array();
        $data['sb'] = $this->_menu;
        $data['pj_id'] = $pj_id;
        $data['content_title'] = "Phân rã công việc";
        $data['works'] = $this->work_model->get_works($pj_id);//print_r($data['works']);
        $this->load->view("work/work_view",$data);
    }
    function my_works(){
        $data['title'] = "Công việc của tôi";
        $data['css_files'] = array();
        $data['js_files'] = array();
        $data['sb'] = $this->_menu;
        $data['content_title'] = "Công việc của tôi";
        $this->load->view("work/my_works_view",$data);
    }
    function my_work($workid){
        $arr = $this->work_model->get_work($workid);
        $name = $arr['name'];
        $data['percent'] = $arr['percent'];
        $data['title'] = "Công việc $name";
        $data['css_files'] = array();
        $data['js_files'] = array();
        $data['workid'] = $workid;
        $data['check_re'] = $this->check_report($workid);
        $data['sb'] = $this->_menu;
        $data['content_title'] = "Công việc $name";
        $data['costonreality'] = $arr['costonreality'];
        // gia tri dat duoc
        $data['evm'] = $this->evm($workid,$pb);
        $this->load->view("work/my_work_view",$data);
    }
   
    function manager($pj_id){
        //echo $this->uri->segment(3);
        $crud = new grocery_CRUD();
        $crud->set_subject('Công việc');
        $crud->set_table('tblworks');
        $crud->set_model('crud_work_model');
        $crud->columns('name','beginonreality','reportdate');
        $crud->unset_fields('tiedate','beginonplan','timevalueonplan','labour','timetieid','costonreality','datetieid','projectid','percent','parentid');
        $crud->unset_edit_fields('tiedate','beginonplan','timevalueonplan','labour','timetieid','costonreality','datetieid','projectid','parentid');
        $crud->set_relation('timetype','tbltimetype','name');
        $crud->set_relation('timeunitid','tbltimeunit','name');
        $crud->display_as('name','Tên công việc');
        $crud->display_as('beginonreality','Bắt đầu');
        $crud->display_as('reportdate','Ngày báo cáo');
        $crud->display_as('timevalueonreality','Thời gian thực hiện');
        $crud->display_as('timeunitid','Đơn vị thời gian');
        $crud->display_as('costonplan','Chi phí');
        $crud->display_as('timetype','Loại thời gian');
        $crud->display_as('parentid','Công việc cha');
        $crud->display_as('percent','Tiến độ hoàn thành (%)');
        //$crud->add_action('Phân rã công việc', base_url()."assets/public/img/icon/settings.png','works/manager/add");
        $crud->set_lang_string('insert_success_message',
		 "Your data has been successfully stored into the database.<br/>Please wait while you are redirecting to the list page.
		 <script type='text/javascript'>
		  window.location ='".  base_url().'works/index/'.$pj_id."';
		 </script>
		 <div style='display:none'>"
        );
        $output = $crud->render();
        $output->title = "Công việc";
        $output->content_title = "Công việc";
        $output->sb = $this->_menu;
        $this->load->view('common/layout_view',$output);
        
    }
    function delete($work_id){
        $this->work_model->delete($work_id);
        $this->work_model->delete_child($work_id);
        redirect($_SERVER['HTTP_REFERER']);
    }
    function report($workid,$percent,$cost){
        $arr = array('percent'=>$percent,'costonreality'=>$cost);
        $this->db->where('id',$workid);
        $this->db->update('tblworks',$arr);
        echo json_encode("Báo cáo thành công");
    }
    function check_report($workid){
        $re = $this->work_model->get_reportdate($workid);
        $re_date = strtotime($re);
        if((int)$this->work_model->get_percent($workid)==100)
            return 'Đã báo cáo';
        if($re_date == time()){
            return "Hôm nay phải báo cáo";
        }else {
            if($re_date>time()){
                return date('d-m-Y',$re_date)." mới báo cáo";
            }else {
                 return "<span style='color:red'>".date('d-m-Y',$re_date)." đã phải báo cáo, đã quá hạn</span>";
            }
        }
    }
    function evm($workid,&$pb){
        $arr = $this->work_model->get_work($workid);
        if($arr['percent']==0) $arr['percent']=0.0000000000001;
         if($arr['costonreality']==0) $arr['costonreality']=0.0000000000001;
        $begin = new DateTime($arr['beginonreality']);//strtotime($arr['beginonreality']);
        $end = new DateTime($arr['beginonreality']);
        $time = $arr['timevalueonreality'];
        switch ($arr['timeunitid']) {
            case '1':
                $end->modify("+$time hours");
                break;
            case '2':
                $end->modify("+$time days");
                break;
            case '3':
                $end->modify("+$time weeks");
                break;
            case '4':
                $end->modify("+$time months");
                break;
            default:
                break;
        }
        $now = time();
        $div = ($now - $begin->getTimestamp())/($end->getTimestamp()-$begin->getTimestamp()); // thuong so thoi gian da qua
        if($div<0) $div = 1;
        $t =  date_diff($begin,$end);
        $STWP = $arr['percent']*($t->format('%R%a'))/100; // Thời gian dự trù để hoàn thành việc đã hoàn thành
        //Thời gian thực tế hoàn thành công việc đã hoàn thành
        $t = date_diff($begin,  dateNow());
        $ATWP = $t->format('%R%a');
        $BAC = round($arr['costonplan'],2);// chi phi hoan thanh theo ke hoach
        $ACWP = round($arr['costonreality'],2);// chi phi thuc te da tieu ton cho cac phan viec da lam
        $EAC = round((100*$ACWP)/($arr['percent']),2);// chi phi uoc tinh se tieu ton de hoan thanh het
        $BCWP = round($arr['percent']*$BAC/100,2);//gia tri thu dc, day la chi phi theo ly thuyet tra cho phan viec thuc te da lam
        $BCWS = round($div*$BAC,2);//chi phi ly thuyet theo thoi gian da qua
        $CV = $BCWP - $ACWP;// Chỉ số đo lường chi phí
        $SV = $BCWP - $BCWS;// Chỉ số đo lường khối lượng
        $TV = $STWP - $ATWP;// Chỉ số đo lường thời gian
        if($ACWP==0) $CPI = 0;
        else $CPI = round ($BCWP /$ACWP,2);// Chỉ số chi phí
        $SPI = round ($BCWP/$BCWS,2);// Chỉ số tiến độ
        $str = '';
        $str .= '<p>Chỉ số BAC là : '.$BAC.'<i>(Chi phí hoàn thành theo kế hoạch)</i>';
        $str .= '<p>Chỉ số ACWP là : '.$ACWP.'<i>(Chi phí thực tế đã tiêu tốn cho các việc đã làm)</i>';
        $str .= '<p>Chỉ số EAC là : '.$EAC.'<i>(Chi phí ước tính sẽ tiêu tốn cho đến khi hoàn thành)</i>';
        $str .= '<p>Chỉ số BCWP là : '.$BCWP.'<i>(Giá trị đạt được, chi phí theo lý thuyết trả cho phần việc đã làm)</i>';
        $str .= '<p>Chỉ số BCWS là : '.$BCWS.'<i>(Chi phí theo lý thuyết trả cho thời gian đã qua)</i>';
        $str .= '<p>Chi phí '.($CV<0 ? ' thâm hụt ':' còn dư ').$CV;
        if($arr['percent']<100){
            $str .= '<p>Khối lượng công việc '.($SV<0 ? ' chậm ':' vượt mức ').$SV;
            $str .= '<p>Thời gian '.($TV<0 ? 'trễ ':'sớm ').$TV.' ngày';
            $str .= "<p>Chỉ số chi phí CPI là $CPI </p>";
            $str .= "<p>Chỉ số tiến độ SPI là $SPI </p>";
            $str .= "<p>Chỉ số tình trạng công việc CSI là ".round($CPI*$SPI,2).'</p>';
            $str .= "<p style='color:#000000;font-size:1.2em;font-weight:bold'>Tình trạng công việc".($CPI*$SPI >1 ? ' chấp nhận được':' đang có vấn đề, cần khắc phục');
            $pb = $CPI*$SPI > 1 ? false:true;
        }else {
            $str .= "<p>Chỉ số chi phí CPI là $CPI </p>";
            $str .= "<p style='color:#000000;font-size:1.2em;font-weight:bold'>Công việc đã hoàn thành.";
            $pb = $CPI > 1 ? false:true;
        }
       return $str;
    }
}
?>
